package it.unibo.iss.domotica.converter;

import it.unibo.iss.domotica.edDomain.ConsumptionData;
import it.unibo.iss.domotica.edDomain.Elettrodomestico;
import it.unibo.iss.domotica.edDomain.IElettrodomestico;

import java.util.ArrayList;
import java.util.List;

import biz.source_code.base64Coder.Base64Coder;
import com.google.gson.Gson;

public class DomoticaJsonConverter implements IDomoticaStringConverter {

	private Gson gson = new Gson();
	
	public Elettrodomestico[] stringToElettrodomesticoArray(String string) {
		String json = Base64Coder.decodeString(string);
		return gson.fromJson(json, Elettrodomestico[].class);
	}

	public ArrayList<Elettrodomestico> stringToElettrodomesticoArrayList(String string) {
		ArrayList<Elettrodomestico> elettrodomesticiArrayList = new ArrayList<Elettrodomestico>();
		Elettrodomestico[] elettrodomestici = stringToElettrodomesticoArray(string);
		for(Elettrodomestico ed : elettrodomestici) {
			elettrodomesticiArrayList.add(ed);
		}
		return elettrodomesticiArrayList;
		
	}

	public String elettrodomesticoArrayToString(Elettrodomestico[] array) {
		return Base64Coder.encodeString(gson.toJson(array));
	}
	
	public String elettrodomesticoArrayListToString(ArrayList<Elettrodomestico> arrayList) {
		Elettrodomestico[] array = new Elettrodomestico[arrayList.size()];
		for(int i = 0; i < arrayList.size(); i++)
			array[i] = arrayList.get(i);
		return elettrodomesticoArrayToString(array);
	}

	public ConsumptionData stringToConsumptionData(String string) {
		String json = Base64Coder.decodeString(string);
		return gson.fromJson(json, ConsumptionData.class);
	}
	
	public String consumptionDataToString(ConsumptionData data) {
		return Base64Coder.encodeString(gson.toJson(data));
	}
	
	/*
	 * Convert List<IElettrodomestico> to ArrayList<Elettrodomestico>
	 */
	public ArrayList<Elettrodomestico> toListElettrodomestico(List<IElettrodomestico> iElettrodomestici) {
		ArrayList<Elettrodomestico> elett = new ArrayList<Elettrodomestico>();
		
		for(IElettrodomestico iEd : iElettrodomestici) {
			elett.add((Elettrodomestico) iEd);
		}
		
		return elett;
	}
}
